#include "ModuleDisplayHist.h"

void ModuleDisplayHist::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
	view=new QLabel(win);

  layout=new QVBoxLayout(win);
	layout->addWidget(view);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleDisplayHist::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleDisplayHist::process()
{

	histImage.create(200,300,CV_8UC3);
	histImage.setTo(cv::Scalar(255,255,255));
		
	if(!hist.empty())
	{
		cv::normalize(hist, hist, 0, histImage.rows, CV_MINMAX, CV_32F);

		for( int i = 0; i < hist.rows; i++ )
		{
		    cv::rectangle( histImage, cv::Point(round(i*histImage.cols/hist.rows), histImage.rows),
		               cv::Point(round((i+1)*histImage.cols/hist.rows), histImage.rows - round(hist.at<float>(i))),
		               cv::Scalar::all(0), -1, 8, 0 );
		}
	}

	QImage tmp((uchar *)histImage.data, histImage.cols, histImage.rows, histImage.step, QImage::Format_RGB888);
	view->setPixmap(QPixmap::fromImage(tmp));

	return histImage;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleDisplayHist::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{	
		hist=m.clone();
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleDisplayHist::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleDisplayHist::getName()
{
	return tr("Affichage Histogramme");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleDisplayHist::nbInputs()
{
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleDisplayHist::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleDisplayHist::getParams()
{
	return tr("no_param");
}

QCVModuleInterface * ModuleDisplayHist::clone()
{
	return new ModuleDisplayHist;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleDisplayHist::help(int id)
{
	if(id==-2)
	{
		return trUtf8("Calcul l'histogramme par composantes de l'image en entrée");
	}
	else if(id==-1)
	{
		return tr("image");
	}
	else if(id==0)
	{
		return tr("histogramme");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleDisplayHist_plugin,ModuleDisplayHist);  
